#include <stdio.h>
#include <unistd.h>
#include <sys/time.h>
#include <pthread.h>
#include <stdlib.h>

int sum_sql(int n){
    // 休眠1秒
    sleep(1);

    return n * n;
}

void *sum_sql_thread(void *arg){
    int sql = *(int *)arg;
    int *result = (int *)malloc(sizeof(int));
    *result = sum_sql(sql);
    
    // return result;
    pthread_exit(result);   // 结束当前线程
}

int main(int argc, char const *argv[])
{
    int sqls[5] = {1, 2, 3, 4, 5};
    int ssqls[5];
    struct timeval start, end;

    // 创建线程
    pthread_t tid[5];

    // 记录开始时间
    gettimeofday(&start, NULL);

    // 创建5个线程，每个线程计算一个sql
    for (int i = 0; i < 5; i++)
    {
        pthread_create(&tid[i], NULL, sum_sql_thread, &sqls[i]);
    }

    // 记录线程结束返回的计算值并将其存入ssqls数组
    for (int i = 0; i < 5; i++)
    {
        void *result;
        pthread_join(tid[i], &result);
        ssqls[i] = *(int *)result;
    }
    
    // 记录结束时间
    gettimeofday(&end, NULL);

    printf("总共消耗的时间: %ld s\n", end.tv_sec - start.tv_sec);

    return 0;
}
